package com.examsys.controller;

import java.io.IOException;
import java.sql.Date;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import com.examsys.po.UserGroups;
import com.examsys.po.Users;
import com.examsys.service.UserGroupsService;
import com.examsys.service.UsersService;
import com.examsys.util.JsonUtils;
import com.examsys.util.Page;

/**
 * 会员或考试者管理控制层
 *
 */
@WebServlet("/users")
public class UsersController extends BaseController{
	//log4j日志对象
	private Logger log=Logger.getLogger(this.getClass());
	
	private UsersService usersService;
	private UserGroupsService userGroupsService;
	
	/**
	 * 初始化工作，这里主要是给业务逻辑层属性做初始化
	 */
	@Override
	public void init() throws ServletException {
		super.init();
		usersService=lookUp("usersService");
		userGroupsService=lookUp("userGroupsService");
	}
	
	/**
	 * 初始化用户组数据
	 * @return
	 * @throws IOException 
	 */
	public void userGroupsDatas(HttpServletRequest request, HttpServletResponse response) throws IOException{
		log.info("获取用户组下拉框数据");
		List<UserGroups> usersGroupsList=null;
		try {
			usersGroupsList=userGroupsService.getList();
		} catch (Exception e) {
			log.error("获取用户组下拉框数据失败",e);
		}
		//最终给JsonUtils转换为json数据输出给浏览器
		response.getWriter().write(JsonUtils.objectToJson(usersGroupsList));
	}
	
	/**
	 * 保存添加
	 * @param users
	 * @param group_id
	 * @return
	 * @throws IOException 
	 */
	public void addSave(HttpServletRequest request, HttpServletResponse response) throws IOException{
		Users users=new Users();
		Integer group_id=Integer.valueOf(request.getParameter("group_id"));
		log.info("接收到页面添加的数据："+users);//把users放到日志
		Map jsonDatas=new HashMap();//存放json数据的集合
		jsonDatas.put("status", 0);//默认状态为0，表示操作失败
		
		try {
			UserGroups userGroups=userGroupsService.get(group_id);
			users.setUserGroups(userGroups);
			users.setCreate_date(new Date(System.currentTimeMillis()));//创建时间
			users.setLogin_date(new Date(System.currentTimeMillis()));
			users.setLogin_times(0);//登录次数
			
			boolean flag = usersService.add(users);
			if(flag){
				jsonDatas.put("status", 1);//设置状态为1，表示操作成功
			}
		} catch (Exception e) {
			log.error("添加失败", e);
		}
		//最终给JsonUtils转换为json数据输出给浏览器
		response.getWriter().write(JsonUtils.objectToJson(jsonDatas));
		
	}
	
	/**
	 * 初始化修改
	 * @param id 待修改的用户的编号
	 * @return
	 * @throws IOException 
	 */
	public void update(HttpServletRequest request, HttpServletResponse response) throws IOException{
		Integer id=Integer.valueOf(request.getParameter("id"));
		log.info("开始初始化编号为"+id+"的用户数据供前端修改");//把id放到日志
		Users users=null;
		try {
			users=usersService.get(id);
		} catch (Exception e) {
			log.error("初始化修改失败", e);
		}
		//最终给JsonUtils转换为json数据输出给浏览器
		response.getWriter().write(JsonUtils.objectToJson(users));
	}
	
	/**
	 * 保存修改
	 * @param users 用户信息对象
	 * @param group_id 用户组
	 * @return
	 * @throws IOException 
	 */
	public void updateSave(HttpServletRequest request, HttpServletResponse response) throws IOException{
		Users users=new Users();
		Integer group_id=Integer.valueOf(request.getParameter("group_id"));
		log.info("接收到页面修改的数据："+users);//把users放到日志
		Map jsonDatas=new HashMap();//存放json数据的集合
		jsonDatas.put("status", 0);//默认状态为0，表示操作失败
		
		try {
			Users oldusers=usersService.get(users.getId());
			oldusers.setUser_name(users.getUser_name());
			oldusers.setUser_pass(users.getUser_pass());
			oldusers.setUser_no(users.getUser_no());
			oldusers.setReal_name(users.getReal_name());
			oldusers.setEmail(users.getEmail());
			oldusers.setPhone(users.getPhone());
			oldusers.setStatus(users.getStatus());
			oldusers.setRemark(users.getRemark());
			
			UserGroups userGroups = userGroupsService.get(group_id);
			oldusers.setUserGroups(userGroups);
			
			boolean flag = usersService.update(oldusers);
			if(flag){
				jsonDatas.put("status", 1);//设置状态为1，表示操作成功
			}
		} catch (Exception e) {
			log.error("修改失败", e);
		}
		//最终给JsonUtils转换为json数据输出给浏览器
		response.getWriter().write(JsonUtils.objectToJson(jsonDatas));
		
	}
	
	/**
	 * 删除会员或考试者
	 * @param id 待删除的考试者的编号
	 * @return
	 * @throws IOException 
	 */
	public void delete(HttpServletRequest request, HttpServletResponse response) throws IOException{
		Integer id=Integer.valueOf(request.getParameter("id"));
		log.info("开始删除编号为"+id+"的系统参数");//把id放到日志
		Map jsonDatas=new HashMap();//存放json数据的集合
		jsonDatas.put("status", 0);//默认状态为0，表示操作失败
		try {
			//通过id去删除数据
			boolean flag = usersService.delete(id);
			if(flag){
				jsonDatas.put("status", 1);//设置状态为1，表示操作成功
			}
			
		} catch (Exception e) {
			log.error("删除失败", e);
		}
		//最终给JsonUtils转换为json数据输出给浏览器
		response.getWriter().write(JsonUtils.objectToJson(jsonDatas));
	}
	
	/**
	 * 会员或者考试者管理
	 * @throws IOException 
	 * @throws ServletException 
	 */
	public void select(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		log.info("进入会员或者考试者管理页面");
		request.getRequestDispatcher("users/usersManager.jsp").forward(request, response);//设置显示页面
	}
	
	/**
	 * 会员或者考试者管理表格数据
	 * @param users 查询条件
	 * @param page 页码
	 * @param rows 每一页行数
	 * @return
	 * @throws IOException 
	 */
	public void selectDatas(HttpServletRequest request, HttpServletResponse response) throws IOException{
		Integer page=Integer.valueOf(request.getParameter("page"));
		Integer rows=Integer.valueOf(request.getParameter("rows"));
		Users users=new Users();
		log.info("开始获取会员或者考试者管理表格数据");
		Map jsonDatas=new HashMap();//待返回json集合数据;
		List<Users> usersList=new ArrayList<Users>();//待返回会员或者考试者数据;
		try {
			//分页处理
			Page<Users> pageObj = usersService.getList(users,page,rows);
			//取记录总条数
			jsonDatas.put("total", pageObj.getTotal());//总数
			jsonDatas.put("rows", pageObj.getResultlist());//前端需要的行数据
		} catch (Exception e) {
			log.error("获取会员或者考试者管理表格数据失败",e);
		}
		//最终给JsonUtils转换为json数据输出给浏览器
		response.getWriter().write(JsonUtils.objectToJson(jsonDatas));
	}
}


